/**
 * 静态文件处理中间件
 */
const express = require('express');
const path = require('path');
const fs = require('fs');

/**
 * 创建静态文件中间件
 * @param {string} staticFilesPath - 静态文件路径
 * @returns {Array} 中间件数组
 */
const createStaticFilesMiddleware = (staticFilesPath) => {
  return [
    // 设置正确的 MIME 类型
    (req, res, next) => {
      if (req.path.endsWith('.css')) {
        res.type('text/css');
      } else if (req.path.endsWith('.js')) {
        res.type('application/javascript');
      } else if (req.path.endsWith('.svg')) {
        res.type('image/svg+xml');
      }
      next();
    },
    
    // 静态文件服务
    express.static(staticFilesPath),
    
    // 处理所有其他路径
    (req, res, next) => {
      const requestedPath = req.path;
      
      // 跳过API路由
      if (requestedPath.startsWith('/api/')) {
        return next();
      }
      
      // 检查请求的文件是否存在
      const filePath = path.join(staticFilesPath, requestedPath);
      const htmlPath = path.join(staticFilesPath, requestedPath + '.html');
      const indexPath = path.join(staticFilesPath, requestedPath, 'index.html');
      
      if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
        // 文件存在，直接返回
        res.sendFile(filePath);
      } else if (fs.existsSync(htmlPath)) {
        // HTML文件存在，直接返回
        res.sendFile(htmlPath);
      } else if (fs.existsSync(indexPath)) {
        // 目录中的index.html存在，返回它
        res.sendFile(indexPath);
      } else {
        // 文件不存在，返回首页
        res.sendFile(path.join(staticFilesPath, 'index.html'));
      }
    }
  ];
};

module.exports = createStaticFilesMiddleware; 